package trlygjj.tanruiliyigenjinjin.web.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import trlygjj.tanruiliyigenjinjin.domain.SystemMenu;
import trlygjj.tanruiliyigenjinjin.page.PageResult;
import trlygjj.tanruiliyigenjinjin.query.QueryObject;
import trlygjj.tanruiliyigenjinjin.service.ISystemMenuService;
import trlygjj.tanruiliyigenjinjin.util.JsonResult;
import trlygjj.tanruiliyigenjinjin.util.PermissionName;
import trlygjj.tanruiliyigenjinjin.util.SystemMenuUtil;

import java.util.List;

/**
 * Created by user on 2018/7/11.
 */
@Controller
@RequestMapping("systemMenu")
public class SystemMenuController {

    @Autowired
    private ISystemMenuService systemMenuService;

    /**
     * 提供一个默认不输入后缀,直接可以跳转到具有分页的列表页面
     * @return
     */
    @RequiresPermissions("systemMenu:index")
    @PermissionName("系统菜单主页")
    @RequestMapping("")
    public String index(){
        return "systemMenu/list";
    }

    @RequiresPermissions("systemMenu:queryRootMenu")
    @PermissionName("查询父菜单")
    @RequestMapping("queryRootMenu")
    @ResponseBody
    public List<SystemMenu> queryRootMenu(){
        List<SystemMenu> menus = (List<SystemMenu>) SecurityUtils.getSubject().getSession().getAttribute(SystemMenuUtil.MENU_IN_SESSION);
        SystemMenuUtil.filterMenus(menus);
        return menus;
    }

    /**
     * 具有分页和高级查询
     * @return
     */
    @RequiresPermissions("systemMenu:list")
    @PermissionName("系统菜单数据")
    @RequestMapping("list")
    @ResponseBody
    public PageResult list(QueryObject qo){
        //PageResult result = systemMenuService.query(qo);
        PageResult result = new PageResult();
        List<SystemMenu> menus = this.queryRootMenu();
        int size = menus.size();
        result.setRows(menus);
        result.setTotal(size);
        return result;
    }

    /**
     * 查询全部
     * @return
     */
    @RequiresPermissions("systemMenu:listAll")
    @PermissionName("全部系统菜单数据")
    @RequestMapping("listAll")
    @ResponseBody
    public List<SystemMenu> listAll(){
        return systemMenuService.selectAll();
    }

    /**
     * 删除
     * @param systemMenuId 要删除的员工对象id
     * @return 返回JsonResult对象判断是否操作成功
     */
    @RequiresPermissions("systemMenu:delete")
    @PermissionName("系统菜单删除")
    @RequestMapping("delete")
    @ResponseBody
    public JsonResult delete(Long systemMenuId){
        JsonResult result = new JsonResult();
        try{
            systemMenuService.deleteByPrimaryKey(systemMenuId);
        }catch (Exception e){
            e.printStackTrace();
            result.mark("操作失败!");
        }
        return result;
    }

    /**
     *更新
     * @param systemMenu 要更新的员工对象
     * @return 返回JsonResult对象判断是否操作成功
     */
    @RequiresPermissions("systemMenu:update")
    @PermissionName("系统菜单更新")
    @RequestMapping("update")
    @ResponseBody
    public JsonResult update(SystemMenu systemMenu){
        JsonResult result = new JsonResult();
        try{
            systemMenuService.updateByPrimaryKey(systemMenu);
        }catch (Exception e){
            e.printStackTrace();
            result.mark("操作失败!");
        }
        return result;
    }

    /**
     * 保存
     * @param systemMenu 要保存的员工对象
     * @return 返回JsonResult对象判断是否操作成功
     */
    @RequiresPermissions("systemMenu:save")
    @PermissionName("系统菜单保存")
    @RequestMapping("save")
    @ResponseBody
    public JsonResult save(SystemMenu systemMenu){
        JsonResult result = new JsonResult();
        try{
            systemMenuService.insert(systemMenu);
        }catch (Exception e){
            e.printStackTrace();
            result.mark("操作失败!");
        }
        return result;
    }

    @RequiresPermissions("systemMenu:querySystemMenuByRoleId")
    @PermissionName("角色查询系统菜单")
    @RequestMapping("querySystemMenuByRoleId")
    @ResponseBody
    public List<SystemMenu> querySystemMenuByRoleId(Long roleId){
        return systemMenuService.querySystemMenuByRoleId(roleId);
    }
}
